#include "./XxxSwitchScan/XxxSwitchScan_Al.h"
#include "stm32f10x.h"



/*KEY1引脚*/
#define KEY_1_GPIO_PORT				GPIOB									/**< gpio端口号 */
#define KEY_1_GPIO_PIN				GPIO_Pin_15								/**< gpio引脚编号 */
#define KEY_1_GPIO_CLK_Enable()		do{ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); }while(0)		/**< gpio端口时钟使能 */
#define KEY_1_GPIO_VALID_LEVEL		(0)										/**< 有效电平 */
#define Read_KEY_1_GPIO_Valid()		({(KEY_1_GPIO_VALID_LEVEL == GPIO_ReadInputDataBit(KEY_1_GPIO_PORT, KEY_1_GPIO_PIN)) ? 1 : 0;})	/**< 读取gpio是否为有效电平 */

/*KEY2引脚*/
#define KEY_2_GPIO_PORT				GPIOB									/**< gpio端口号 */
#define KEY_2_GPIO_PIN				GPIO_Pin_14								/**< gpio引脚编号 */
#define KEY_2_GPIO_CLK_Enable()		do{ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); }while(0)		/**< gpio端口时钟使能 */
#define KEY_2_GPIO_VALID_LEVEL		(0)										/**< 有效电平 */
#define Read_KEY_2_GPIO_Valid()		({(KEY_2_GPIO_VALID_LEVEL == GPIO_ReadInputDataBit(KEY_2_GPIO_PORT, KEY_2_GPIO_PIN)) ? 1 : 0;})	/**< 读取gpio是否为有效电平 */

/*KEY3引脚*/
#define KEY_3_GPIO_PORT				GPIOB									/**< gpio端口号 */
#define KEY_3_GPIO_PIN				GPIO_Pin_13								/**< gpio引脚编号 */
#define KEY_3_GPIO_CLK_Enable()		do{ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); }while(0)		/**< gpio端口时钟使能 */
#define KEY_3_GPIO_VALID_LEVEL		(0)										/**< 有效电平 */
#define Read_KEY_3_GPIO_Valid()		({(KEY_3_GPIO_VALID_LEVEL == GPIO_ReadInputDataBit(KEY_3_GPIO_PORT, KEY_3_GPIO_PIN)) ? 1 : 0;})	/**< 读取gpio是否为有效电平 */



/*按键GPIO配置*/
void KEY_GPIO_Cfg(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	/*KEY1配置*/
	KEY_1_GPIO_CLK_Enable();
	GPIO_InitStructure.GPIO_Mode	= GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin		= KEY_1_GPIO_PIN;
	GPIO_Init(KEY_1_GPIO_PORT, &GPIO_InitStructure);

	/*KEY2配置*/
	KEY_2_GPIO_CLK_Enable();
	GPIO_InitStructure.GPIO_Mode	= GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin		= KEY_2_GPIO_PIN;
	GPIO_Init(KEY_2_GPIO_PORT, &GPIO_InitStructure);

	/*KEY3配置*/
	KEY_3_GPIO_CLK_Enable();
	GPIO_InitStructure.GPIO_Mode	= GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin		= KEY_3_GPIO_PIN;
	GPIO_Init(KEY_3_GPIO_PORT, &GPIO_InitStructure);
}



/*KEY1读取函数*/
unsigned char ReadKEY1(void)
{
	return Read_KEY_1_GPIO_Valid();
}
/*KEY2读取函数*/
unsigned char ReadKEY2(void)
{
	return Read_KEY_2_GPIO_Valid();
}
/*KEY3读取函数*/
unsigned char ReadKEY3(void)
{
	return Read_KEY_3_GPIO_Valid();
}
/*KEY2与KEY3的组合读取函数*/
unsigned char ReadKEY2and3(void)
{
	/*两个按键同时有效则返回1，否则返回0。这里就是把组合按键也抽象为一个全新的独立按键*/
	if(Read_KEY_2_GPIO_Valid() && Read_KEY_3_GPIO_Valid())
	{
		return 1;
	}
	return 0;
}
